/**
 * 461. 汉明距离
 * https://leetcode-cn.com/problems/hamming-distance/
 */
public class Solutions_461 {
    // 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
    public static void main(String[] args) {
        int x = 1, y = 4;  // output: 2

        int result = hammingDistance2(x, y);
        System.out.println(result);
    }

    /**
     * 解法一：遍历
     */
    public static int hammingDistance(int x, int y) {
        int res = 0;
        for (int i = 0; i < 32; i++) {
            res += (x & 1) == (y & 1) ? 0 : 1;
            x = x >>> 1;
            y = y >>> 1;
        }
        return res;
    }

    /**
     * 解法二：异或
     */
    public static int hammingDistance2(int x, int y) {
        // 统计异或后，位 1 的个数
        // 两个位不同时，异或后才为 1
        return Integer.bitCount(x ^ y);
    }
}
